﻿using System;
using System.Data;
using SiGeCoPre.Presupuesto_DAO;
using SiGeCoPre.Presupuesto_DTO;
using SiGeCoPre.Presupuesto_Entities;
using SiGeCoPre.Presupuesto_Factory;
using SiGeCoPre.Presupuesto_Excepcion;
using SiGeCoPre.Presupuesto_Util;

namespace SiGeCoPre.Presupuesto_BLIMPL
{
    /// <summary>
    /// Clase que implementa BLEquipo
    /// </summary>
    class BLIMPLEquipo:Presupuesto_BL.BLEquipo
    {
        DAOEquipo createEquipo = DAOFactoryPresupuesto.createEquipo();

        /// <summary>
        /// Guarda un equipo
        /// </summary>
        /// <param name="e">Objeto que tiene los datos del equipo a guardar</param>
        /// <returns>Devuelve true si fue ingresado correctamente o false si falló</returns>
        public bool saveEquipo(equipoDTO e)
        {
            Boolean correcto = false;

            try
            {
                Boolean insertado = createEquipo.saveEquipo(e.TipoEquipo, e.MotorPrincipal, e.EquipoHidraulico, e.BombaHidraulica, e.Sensores, e.SistemaEnfriamiento, e.Filtros, e.SistemaRecirculacion,
                    e.Largo, e.Ancho, e.InclinacionMaxima, e.CapacidadDescarga, e.Calzas, e.UbicacionCilindros, e.CapacidadOperativa, e.InstalacionHidraulica, e.InstalacionElectrica, e.DetalleCilindros, e.DetalleExtras, e.Activo);

                if (insertado)
                {
                    correcto = true;
                }
            }
            catch (Exception ex)
            {

                correcto = false;
                Texto.escribirLog(ex.Message);
                throw new BLException(ex.Message);
            }

            return correcto;
        }

        /// <summary>
        /// Modifica un equipo
        /// </summary>
        /// <param name="e">Objeto con los datos del equipo a modificar</param>
        /// <param name="id">Determina el equipo a modificar</param>
        /// <returns>Devuelve true si fue modificado correctamente o false si falló</returns>
        public bool updateEquipo(equipoDTO e, int id)
        {
            Boolean correcto = false;

            try
            {
                Boolean modificado = createEquipo.updateEquipo(e.TipoEquipo, e.MotorPrincipal, e.EquipoHidraulico, e.BombaHidraulica, e.Sensores, e.SistemaEnfriamiento, e.Filtros, e.SistemaRecirculacion,
                    e.Largo, e.Ancho, e.InclinacionMaxima, e.CapacidadDescarga, e.Calzas, e.UbicacionCilindros, e.CapacidadOperativa, e.InstalacionHidraulica, e.InstalacionElectrica, e.DetalleCilindros, e.DetalleExtras, e.Activo, id);
                
                if (modificado)
                {
                    correcto = true;
                }
            }
            catch (Exception ex)
            {

                correcto = false;
                Texto.escribirLog(ex.Message);
                throw new BLException(ex.Message);
            }

            return correcto;
        }

        /// <summary>
        /// Elimina un equipo
        /// </summary>
        /// <param name="id">Determina el equipo a eliminar</param>
        /// <returns>Devuelve true si fue eliminado correctamente o false si falló</returns>
        public bool deleteEquipo(int id)
        {
            Boolean correcto = false;

            try
            {
                Boolean eliminado = createEquipo.deleteEquipo(id);

                if (eliminado)
                {
                    correcto = true;
                }
            }
            catch (Exception ex)
            {

                correcto = false;
                Texto.escribirLog(ex.Message);
                throw new BLException(ex.Message);
            }

            return correcto;
        }

        /// <summary>
        /// Lista los equipos
        /// </summary>
        /// <returns>Devuelve una tabla con los equipos</returns>
        public DataTable getAllEquipos()
        {
            DataTable listadoEquipos = null;

            try
            {
                DataTable equipos = createEquipo.getAllEquipos();

                if (null != equipos)
                {
                    listadoEquipos = equipos;
                }
            }
            catch (Exception ex)
            {

                listadoEquipos = null;
                Texto.escribirLog(ex.Message);
                throw new BLException(ex.Message);
            }

            return listadoEquipos;
        }

        /// <summary>
        /// Obtiene un equipo
        /// </summary>
        /// <param name="id">Determina el equipo a obtener</param>
        /// <returns>Devuelve un objeto equipo</returns>
        public equipoDTO getEquipo(int id)
        {
            equipoDTO e = null;

            try
            {
                equipo eq = createEquipo.getEquipo(id);

                if (null != eq)
                {
                    e = new equipoDTO();
                    e.Activo = eq.Activo;
                    e.Ancho = eq.Ancho;
                    e.BombaHidraulica = eq.BombaHidraulica;
                    e.Calzas = eq.Calzas;
                    e.CapacidadDescarga = eq.CapacidadDescarga;
                    e.CapacidadOperativa = eq.CapacidadOperativa;
                    e.DetalleCilindros = eq.DetalleCilindros;
                    e.DetalleExtras = eq.DetalleExtras;
                    e.EquipoHidraulico = eq.EquipoHidraulico;
                    e.Filtros = eq.Filtros;
                    e.ID = eq.ID;
                    e.InclinacionMaxima = eq.InclinacionMaxima;
                    e.InstalacionElectrica = eq.InstalacionElectrica;
                    e.InstalacionHidraulica = eq.InstalacionHidraulica;
                    e.Largo = eq.Largo;
                    e.MotorPrincipal = eq.MotorPrincipal;
                    e.Sensores = eq.Sensores;
                    e.SistemaEnfriamiento = eq.SistemaEnfriamiento;
                    e.SistemaRecirculacion = eq.SistemaRecirculacion;
                    e.TipoEquipo = eq.TipoEquipo;
                    e.UbicacionCilindros = eq.UbicacionCilindros;
                }
            }
            catch (Exception ex)
            {

                e = null;
                Texto.escribirLog(ex.Message);
                throw new BLException(ex.Message);
            }

            return e;
        }

        /// <summary>
        /// Obtiene el mayor id de la tabla equipos
        /// </summary>
        /// <returns>Devuelve un entero con el valor del id</returns>
        public int getMaxId()
        {
            int id = 0;

            try
            {
                int maxid = createEquipo.getMaxId();

                if (maxid != 0)
                {
                    id = maxid;
                }
            }
            catch (Exception ex)
            {

                id = 0;
                Texto.escribirLog(ex.Message);
                throw new BLException(ex.Message);
            }

            return id;
        }
    }
}
